//
//  DebugViewController.swift
//  iOS-RxSwift-Tutorials_Example
//
//  Created by mengru.tian on 2020/9/18.
//  Copyright © 2020 CocoaPods. All rights reserved.
//

import UIKit
import RxSwift
import RxCocoa

class DebugViewController: UIViewController {

    private let disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "14.调试操作"
        self.view.backgroundColor = .white
        
        // testDebug()
        testDebug2()
    }
    
    // 我们可以将 debug 调试操作符添加到一个链式步骤当中，这样系统就能将所有的订阅者、事件、和处理等详细信息打印出来，方便我们开发调试。
    func testDebug() {

        Observable.of("2", "3")
            .startWith("1")
            .debug()
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)
        // result:
        // (testDebug()) -> subscribed
        // (testDebug()) -> Event next(1)
        // 1
        // (testDebug()) -> Event next(2)
        // 2
        // (testDebug()) -> Event next(3)
        // 3
        // (testDebug()) -> Event completed
        // (testDebug()) -> isDisposed
    }
    
    // debug() 方法还可以传入标记参数，这样当项目中存在多个 debug 时可以很方便地区分出来。
    func testDebug2() {
        Observable.of("2", "3")
        .startWith("1")
        .debug("调试")
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
        // result:
        // 2020-09-18 15:41:14.552: 调试 -> subscribed
        // 2020-09-18 15:41:14.553: 调试 -> Event next(1)
        // 1
        // 2020-09-18 15:41:14.553: 调试 -> Event next(2)
        // 2
        // 2020-09-18 15:41:14.553: 调试 -> Event next(3)
        // 3
        // 2020-09-18 15:41:14.553: 调试 -> Event completed
        // 2020-09-18 15:41:14.553: 调试 -> isDisposed
    }
    
    // 通过将 RxSwift.Resources.total 打印出来，我们可以查看当前 RxSwift 申请的所有资源数量。这个在检查内存泄露的时候非常有用。
    func testResourcesTotal() {
         
//        print(RxSwift.Resources.total)
//
//        Observable.of("BBB", "CCC")
//            .startWith("AAA")
//            .subscribe(onNext: { print($0) })
//            .disposed(by: disposeBag)
//
//        print(RxSwift.Resources.total)
    }

}
